Contributions from iNaturalist national sites

Data analyses

Author

Florencia Grattarola

Published

May 23, 2025

The iNaturalist Network is a localised experience that is fully connected to the global iNaturalist community. Network members are local institutions that promote local use and facilitate the use of data from iNaturalist to benefit local

The aim of this report is to give an account of the importance of the iNaturalist network members by analysing the number of records for each country.

Code
library(MASS)
library(stargazer)
library(httr)
library(jsonlite)
library(knitr)
library(rgbif)
library(ggrepel)
library(extrafont)
library(tidyverse)  

options(knitr.kable.NA = '') 
options(scipen=999)

iNaturalist National Sites

Code
iNat_network <- 
  tribble(~'site', ~'site_name', ~'site_id',
        'Global', 'iNaturalist', 1,
        'Mexico', 'iNaturalistMX', 2,
        'New Zealand', 'iNaturalistNZ', 3,
        'Canada', 'iNaturalist.ca', 5,
        'Colombia', 'NaturalistaCO', 6,
        'Portugal', 'BioDiversity4All', 8,
        'Australia', 'iNaturalistAU', 9,
        'Panama', 'iNaturalistPa', 13,
        'Ecuador', 'iNaturalistEc', 14,
        'Israel', 'iNaturalistil', 15,
        'Argentina', 'ArgentiNat', 16,
        'Costa Rica', 'NaturalistaCR', 17,
        'Chile', 'iNaturalistCL', 18,
        'Finland', 'iNaturalistFi', 20,
        'Sweeden', 'iNaturalist.Se', 21,
        'Spain', 'Natusfera', 22,
        'Greece', 'iNaturalistGR', 23,
        'Guatemala', 'iNaturalistGT', 24,
        'United Kingdom', 'iNaturalistUK', 25,
        'Luxembourg', 'iNaturalist.LU', 26,
        'Taiwan', 'iNaturalistTW', 27,
        'Uruguay', 'NaturalistaUY', 28)

iNat_network %>% 
  mutate('#'= row_number()) %>% relocate('#') %>% 
  rename(`Site` = site,
         `Name`=site_name,
         `ID`=site_id) %>% 
  kableExtra::kbl(digits=1, format.args = list(big.mark = ',')) %>% 
  kableExtra::kable_material('striped') %>% 
  kableExtra::row_spec(row = c(2,5,8,9,11,12,13,18,22), bold = T, color = "white", background = "#228A22")
Members of the iNaturalist Network. Shown in green are the site from Latin America
# Site Name ID
1 Global iNaturalist 1
2 Mexico iNaturalistMX 2
3 New Zealand iNaturalistNZ 3
4 Canada iNaturalist.ca 5
5 Colombia NaturalistaCO 6
6 Portugal BioDiversity4All 8
7 Australia iNaturalistAU 9
8 Panama iNaturalistPa 13
9 Ecuador iNaturalistEc 14
10 Israel iNaturalistil 15
11 Argentina ArgentiNat 16
12 Costa Rica NaturalistaCR 17
13 Chile iNaturalistCL 18
14 Finland iNaturalistFi 20
15 Sweeden iNaturalist.Se 21
16 Spain Natusfera 22
17 Greece iNaturalistGR 23
18 Guatemala iNaturalistGT 24
19 United Kingdom iNaturalistUK 25
20 Luxembourg iNaturalist.LU 26
21 Taiwan iNaturalistTW 27
22 Uruguay NaturalistaUY 28

Methods

We tested different explanatory variables and saw which is the model that best explains the values a country has for iNaturalist.

Response variables:

  • total number of records on iNaturalist per country: n_records_inat.
  • number of records from iNaturalist on GBIF per country (proxy for quality, research grade records): n_records_gbif_iNat.
  • number of users recording in the country (this is not exactly the users from the country, but users that have generated records in the country): n_users.

Explanatory variables:

  • population of the country: population.
  • area of the country in km2: area.
  • country’s centroid latitude (as a proxy of expected biodiversity): latitude.
  • human development index: hdi.
  • GDP per capita: gdp_per_capita.
  • % of the GDP of the country dedicated to research: gdp_research.

Data extraction

Functions

Code
source('R/national_sites.R')

Data download

Code
LatinAmerica <- tibble(country_name= c('Mexico', 'Brazil', 'Costa Rica', 'Colombia', 'Peru', 'Argentina', 'Ecuador', 'Panama', 'Chile', 'Venezuela', 'Belize', 'Honduras', 'Bolivia', 'Guatemala', 'Cuba', 'Nicaragua', 'Paraguay', 'Bahamas', 'Jamaica', 'Trinidad and Tobago', 'Guyana', 'Dominican Republic', 'El Salvador', 'Suriname', 'Uruguay', 'Haiti'))

LatinAmerica <- LatinAmerica %>% 
  mutate(country_code = countrycode::countrycode(country_name,
                                                 origin = 'country.name',
                                                 destination = 'iso2c'))

LatinAmerica <- left_join(LatinAmerica, iNat_network %>% rename(country_name=site))

n_inat_gbif_country <- recordsPerCountryGBIF(LatinAmerica$country_code)
n_inat_country <- recordsPerCountryiNat(LatinAmerica$country_name)
n_users_country <- usersPerCountryiNat(LatinAmerica$country_name)

area_country <-areaPerCountry(LatinAmerica$country_code)
population <- populationPerCountry(LatinAmerica$country_code)
gdp_per_capita <- gdpPerCapitaCountry(LatinAmerica$country_code)
gdp_research <- gdpResearchPerCountry(LatinAmerica$country_code)
latitude <- latitudePerCountry(LatinAmerica$country_code)

data_variables_Latam <- left_join(left_join(left_join(
  left_join(left_join(left_join(left_join(left_join(
  LatinAmerica, n_inat_gbif_country),
  n_inat_country), 
  n_users_country),
  area_country), 
  population), 
  gdp_per_capita), 
  gdp_research), latitude)

saveRDS(data_variables_Latam, 'data/Latin_America_data_variables.rds')

########################################################################

Europe <- tibble(country_name = c('Austria', 'Belgium', 'Bulgaria', 'Croatia', 'Cyprus', 'Czechia', 'Denmark', 'Estonia', 'Finland', 'France', 'Germany', 'Greece', 'Hungary', 'Ireland', 'Italy', 'Latvia', 'Lithuania', 'Luxembourg', 'Malta', 'Netherlands', 'Poland', 'Portugal', 'Romania', 'Slovakia', 'Slovenia', 'Spain', 'Sweden', 'United Kingdom', 'Iceland', 'Liechtenstein', 'Norway', 'Switzerland', 'Albania', 'Bosnia and Herzegovina', 'Georgia', 'Moldova', 'Montenegro', 'Macedonia', 'Serbia', 'Turkey', 'Ukraine'))

Europe <- Europe %>% 
  mutate(country_code = countrycode::countrycode(country_name,
                                                 origin = 'country.name',
                                                 destination = 'iso2c'))

Europe <- left_join(Europe, iNat_network %>% rename(country_name=site))

n_inat_gbif_country <- recordsPerCountryGBIF(Europe$country_code)
n_inat_country <- recordsPerCountryiNat(Europe$country_name)
n_users_country <- usersPerCountryiNat(Europe$country_name)

area_country <-areaPerCountry(Europe$country_code)
population <- populationPerCountry(Europe$country_code)
gdp_per_capita <- gdpPerCapitaCountry(Europe$country_code)
gdp_research <- gdpResearchPerCountry(Europe$country_code)
latitude <- latitudePerCountry(Europe$country_code)

data_variables_Europe <- left_join(left_join(left_join(
  left_join(left_join(left_join(left_join(left_join(
  Europe, n_inat_gbif_country),
  n_inat_country), 
  n_users_country),
  area_country), 
  population), 
  gdp_per_capita), 
  gdp_research), latitude)

saveRDS(data_variables_Europe, 'data/Europe_data_variables.rds')

########################################################################

Asia <- tibble(country_name = c('India', 'China', 'Indonesia', 'Pakistan', 'Bangladesh', 'Japan', 'Philippines', 'Vietnam', 'Iran', 'Turkey', 'Thailand', 'Myanmar', 'South Korea','Iraq', 'Afghanistan', 'Yemen', 'Uzbekistan', 'Malaysia', 'Saudi Arabia', 'Nepal', 'North Korea','Syria', 'Sri Lanka','Kazakhstan', 'Cambodia', 'Jordan', 'United Arab Emirates', 'Tajikistan', 'Azerbaijan', 'Israel', 'Laos', 'Turkmenistan', 'Kyrgyzstan', 'Singapore', 'Lebanon', 'Palestine','Oman', 'Kuwait', 'Georgia', 'Mongolia', 'Qatar', 'Armenia', 'Bahrain', 'Timor Leste', 'Cyprus', 'Bhutan', 'Maldives', 'Brunei', 'Taiwan'))

Asia <- Asia %>% 
  mutate(country_code = countrycode::countrycode(country_name,
                                                 origin = 'country.name',
                                                 destination = 'iso2c'))

Asia <- left_join(Asia, iNat_network %>% rename(country_name=site))

n_inat_gbif_country <- recordsPerCountryGBIF(Asia$country_code)
n_inat_country <- recordsPerCountryiNat(Asia$country_name)
n_users_country <- usersPerCountryiNat(Asia$country_name)

area_country <-areaPerCountry(Asia$country_code)
population <- populationPerCountry(Asia$country_code)
gdp_per_capita <- gdpPerCapitaCountry(Asia$country_code)
gdp_research <- gdpResearchPerCountry(Asia$country_code)
latitude <- latitudePerCountry(Asia$country_code)

data_variables_Asia <- left_join(left_join(left_join(
  left_join(left_join(left_join(left_join(left_join(
  Asia, n_inat_gbif_country),
  n_inat_country), 
  n_users_country),
  area_country), 
  population), 
  gdp_per_capita), 
  gdp_research), latitude)

data_variables_Asia <- data_variables_Asia %>% 
  mutate(area = ifelse(country_name == 'Taiwan', 36197, area),
         pop = ifelse(country_name == 'Taiwan', 23365274, pop))

saveRDS(data_variables_Asia, 'data/Asia_data_variables.rds')

########################################################################

Oceania <- tibble(country_name = c('Australia', 'Papua New Guinea', 'New Zealand', 'Fiji', 'Solomon Islands', 'Federated States of Micronesia', 'Vanuatu', 'Samoa', 'Kiribati', 'Tonga', 'Marshall Islands', 'Palau', 'Tuvalu', 'Nauru'))

Oceania <- Oceania %>% 
  mutate(country_code = countrycode::countrycode(country_name,
                                                 origin = 'country.name',
                                                 destination = 'iso2c'))

Oceania <- left_join(Oceania, iNat_network %>% rename(country_name=site))

n_inat_gbif_country <- recordsPerCountryGBIF(Oceania$country_code)
n_inat_country <- recordsPerCountryiNat(Oceania$country_name)
n_users_country <- usersPerCountryiNat(Oceania$country_name)

area_country <-areaPerCountry(Oceania$country_code)
population <- populationPerCountry(Oceania$country_code)
gdp_per_capita <- gdpPerCapitaCountry(Oceania$country_code)
gdp_research <- gdpResearchPerCountry(Oceania$country_code)
latitude <- latitudePerCountry(Oceania$country_code)

data_variables_Oceania <- left_join(left_join(left_join(
  left_join(left_join(left_join(left_join(left_join(
  Oceania, n_inat_gbif_country),
  n_inat_country), 
  n_users_country),
  area_country), 
  population), 
  gdp_per_capita), 
  gdp_research), latitude)

saveRDS(data_variables_Oceania, 'data/Oceania_data_variables.rds')

########################################################################

variables_global <- bind_rows(data_variables_Latam %>% 
                                mutate(continent = 'America'),
                              data_variables_Europe %>% 
                                mutate(continent = 'Europe'),
                              data_variables_Asia %>% 
                                mutate(continent = 'Asia'),
                              data_variables_Oceania %>% 
                                mutate(continent = 'Oceania')) %>% 
  unique()

# variables_global <- bind_rows(readRDS('data/Latin_America_data_variables.rds') %>%
#                                 mutate(continent = 'America'),
#           readRDS('data/Europe_data_variables.rds') %>%
#                                 mutate(continent = 'Europe'),
#           readRDS('data/Asia_data_variables.rds') %>%
#                                 mutate(continent = 'Asia'),
#           readRDS('data/Oceania_data_variables.rds') %>%
#                                 mutate(continent = 'Oceania'))  %>%
#   unique()

saveRDS(variables_global, 'data/global_data_variables.rds')

Summary of the data for the Network members

Total number of records on iNaturalist per country

Code
data_variables %>% 
  select(country_name,site_name, n_records_inat) %>% 
  arrange(desc(n_records_inat)) %>% 
  mutate('#'= row_number()) %>% relocate('#') %>% 
  rename(`Country` = country_name,
         `iNat site` = site_name,
         `Records on iNa`=n_records_inat) %>% 
  kableExtra::kbl(digits=4, format.args = list(big.mark = ',')) %>% 
  kableExtra::kable_material('striped') %>% 
  kableExtra::row_spec(c(1,2,3,6,7,11,13,14,15,16,19,23,31,34,35,43,47,56,59), bold = T, color = "white", background = "#228A22") %>% 
  kableExtra::scroll_box(height = '600px')
# Country iNat site Records on iNa
1 Australia iNaturalistAU 10,849,285
2 Mexico iNaturalistMX 8,412,878
3 United Kingdom iNaturalistUK 6,943,926
4 Germany 5,091,498
5 France 4,932,213
6 Spain Natusfera 4,604,659
7 Taiwan iNaturalistTW 3,666,074
8 Italy 3,662,680
9 India 3,571,023
10 Brazil 3,496,383
11 New Zealand iNaturalistNZ 2,981,047
12 Austria 2,476,537
13 Portugal BioDiversity4All 2,107,143
14 Colombia NaturalistaCO 1,906,978
15 Ecuador iNaturalistEc 1,874,298
16 Argentina ArgentiNat 1,833,690
17 Denmark 1,657,667
18 China 1,646,241
19 Costa Rica NaturalistaCR 1,580,750
20 Ukraine 1,526,147
21 Czechia 1,301,754
22 Poland 1,254,562
23 Finland iNaturalistFi 1,170,974
24 Thailand 996,118
25 Malaysia 973,288
26 Japan 965,864
27 Indonesia 955,846
28 Netherlands 954,360
29 Bolivia 940,987
30 Switzerland 905,895
31 Chile iNaturalistCL 874,637
32 Peru 785,040
33 Singapore 746,405
34 Panama iNaturalistPa 716,233
35 Greece iNaturalistGR 709,163
36 Sweden 659,853
37 Belgium 647,042
38 South Korea 532,394
39 Hungary 481,094
40 Philippines 479,525
41 Lithuania 464,960
42 Croatia 427,593
43 Luxembourg iNaturalist.LU 375,167
44 Norway 371,783
45 Turkey 367,680
46 Turkey 367,680
47 Israel iNaturalistil 358,153
48 Honduras 333,488
49 Ireland 263,299
50 Romania 247,772
51 Slovakia 226,580
52 Slovenia 205,635
53 Sri Lanka 203,493
54 Kazakhstan 198,800
55 Vietnam 189,863
56 Guatemala iNaturalistGT 169,461
57 Bulgaria 162,215
58 Belize 159,060
59 Uruguay NaturalistaUY 156,542
60 Dominican Republic 145,874
61 Serbia 144,065
62 Trinidad and Tobago 127,651
63 Nicaragua 122,372
64 Iceland 115,563
65 Nepal 110,868
66 Mongolia 94,205
67 El Salvador 92,398
68 Venezuela 89,283
69 Cuba 87,891
70 Cambodia 83,930
71 Estonia 75,483
72 Jamaica 73,803
73 Albania 73,194
74 Armenia 73,171
75 United Arab Emirates 71,277
76 Latvia 69,627
77 Fiji 66,619
78 Cyprus 65,867
79 Maldives 61,266
80 Bahamas 59,703
81 Iran 59,489
82 Montenegro 57,086
83 Bhutan 46,283
84 Uzbekistan 42,320
85 Bosnia and Herzegovina 41,590
86 Pakistan 36,960
87 Paraguay 35,836
88 Bangladesh 35,612
89 Papua New Guinea 35,464
90 Kyrgyzstan 33,781
91 Myanmar 32,490
92 Palestine 31,040
93 Saudi Arabia 30,342
94 Oman 29,897
95 Suriname 29,310
96 Kuwait 29,189
97 Malta 27,991
98 Guyana 27,703
99 Macedonia 27,626
100 Laos 26,952
101 Syria 24,597
102 Marshall Islands 24,568
103 Vanuatu 23,271
104 Jordan 22,029
105 Palau 18,512
106 Azerbaijan 18,467
107 Haiti 16,634
108 Solomon Islands 14,516
109 Moldova 14,322
110 Iraq 14,125
111 Lebanon 13,122
112 Brunei 11,386
113 Cyprus 10,894
114 Qatar 10,678
115 Yemen 9,808
116 Tajikistan 9,560
117 Tonga 8,175
118 Georgia 6,820
119 Georgia 6,820
120 Federated States of Micronesia 6,153
121 Samoa 5,247
122 Liechtenstein 4,717
123 Bahrain 3,592
124 Tuvalu 2,885
125 Kiribati 2,550
126 North Korea 1,884
127 Afghanistan 1,050
128 Turkmenistan 626
129 Nauru 103
130 Timor Leste

Number of records from iNaturalist on GBIF per country

Code
data_variables %>% 
  select(country_name, site_name, n_records_gbif, n_records_gbif_iNat) %>% 
  mutate(proportion=n_records_gbif_iNat*100/n_records_gbif) %>% 
  arrange(desc(proportion)) %>% 
  mutate('#'= row_number()) %>% relocate('#') %>% 
  select(-n_records_gbif_iNat) %>% 
  rename(`Country` = country_name,
         `iNat site` = site_name,
         `Records from iNat on GBIF`=n_records_gbif,
         `Proportion`=proportion) %>% 
  kableExtra::kbl(digits=4, format.args = list(big.mark = ',')) %>% 
  kableExtra::kable_material('striped') %>% 
  kableExtra::row_spec(c(17,19,26,34,38,45,51,52,58,62,78,85,88,104,105,108,111,113,114,120), bold = T, color = "white", background = "#228A22") %>% 
  kableExtra::scroll_box(height = '600px')
# Country iNat site Records from iNat on GBIF Proportion
1 Maldives 102,600 28.5780
2 Ukraine 3,305,090 27.4630
3 Albania 113,283 26.0198
4 Italy 7,401,549 22.7511
5 Singapore 1,664,886 22.4301
6 Kazakhstan 435,373 22.2200
7 Montenegro 142,401 19.2155
8 Tuvalu 9,554 18.7565
9 Croatia 1,078,021 18.6975
10 Malta 81,373 18.3243
11 Lithuania 1,232,602 17.2011
12 Bosnia and Herzegovina 82,290 16.6764
13 Uzbekistan 117,367 15.7259
14 Fiji 275,858 15.1440
15 Marshall Islands 109,599 14.1853
16 Hungary 1,882,300 12.8489
17 New Zealand iNaturalistNZ 14,957,900 12.3202
18 Czechia 4,357,996 12.2621
19 Greece iNaturalistGR 3,065,179 12.0781
20 Indonesia 3,076,242 11.8549
21 Austria 12,772,943 11.5651
22 Timor Leste 91,370 11.3823
23 Slovenia 790,292 11.2033
24 Armenia 192,968 11.1687
25 Romania 1,070,706 10.6347
26 Mexico iNaturalistMX 31,246,257 10.4663
27 Iraq 72,541 8.8419
28 Macedonia 118,106 8.1918
29 Malaysia 3,341,240 8.0139
30 Mongolia 571,726 7.9358
31 Cyprus 522,317 7.5020
32 Cyprus 522,489 7.4995
33 Bahrain 22,772 7.4697
34 Argentina ArgentiNat 14,442,374 7.3516
35 Serbia 865,944 7.2042
36 Dominican Republic 784,391 7.1786
37 Slovakia 1,688,147 7.0103
38 Taiwan iNaturalistTW 21,421,162 6.9228
39 Kyrgyzstan 203,073 6.7690
40 Yemen 91,962 6.7506
41 Vietnam 783,215 6.7150
42 Jordan 140,953 6.5376
43 Brunei 49,391 6.4060
44 Vanuatu 165,949 6.0513
45 Luxembourg iNaturalist.LU 3,354,337 5.9892
46 Philippines 2,079,909 5.8888
47 Thailand 6,122,726 5.7396
48 Japan 8,472,177 5.1061
49 Palau 193,504 5.1053
50 Solomon Islands 185,161 5.0497
51 Portugal BioDiversity4All 19,715,797 5.0231
52 Uruguay NaturalistaUY 1,681,236 4.9915
53 China 9,433,222 4.9189
54 Bulgaria 1,835,892 4.7743
55 Samoa 45,966 4.7731
56 Sri Lanka 2,146,804 4.4949
57 Trinidad and Tobago 1,127,557 4.4920
58 Ecuador iNaturalistEc 11,650,103 4.4398
59 Georgia 1,181,861 4.3536
60 Georgia 1,181,992 4.3531
61 Germany 62,252,275 4.3359
62 Australia iNaturalistAU 135,376,182 4.1283
63 Turkey 3,309,188 4.1221
64 Turkey 3,309,436 4.1218
65 Bolivia 2,200,010 4.1167
66 Myanmar 333,389 4.0925
67 Poland 14,780,502 4.0749
68 Latvia 604,673 4.0703
69 Jamaica 680,756 3.9274
70 Moldova 121,784 3.8347
71 Haiti 189,175 3.7553
72 Brazil 26,616,459 3.7527
73 Kuwait 311,359 3.6989
74 Qatar 135,904 3.6460
75 South Korea 5,403,467 3.6406
76 Laos 242,832 3.5642
77 Iran 818,764 3.4275
78 Chile iNaturalistCL 10,730,491 3.3229
79 Azerbaijan 242,165 3.2565
80 Honduras 3,459,123 3.2295
81 Tonga 133,783 3.1147
82 Lebanon 147,284 3.0723
83 Tajikistan 84,825 3.0380
84 Bahamas 987,306 3.0325
85 Spain Natusfera 72,566,816 2.9929
86 Cambodia 950,623 2.9868
87 Syria 310,449 2.9493
88 Panama iNaturalistPa 7,850,521 2.9067
89 Cuba 1,845,461 2.8590
90 Palestine 581,583 2.8202
91 Suriname 463,888 2.7455
92 Saudi Arabia 501,270 2.7037
93 Nicaragua 2,045,925 2.6963
94 North Korea 47,941 2.6950
95 El Salvador 1,250,974 2.6841
96 Iceland 2,138,710 2.6692
97 Liechtenstein 86,720 2.5023
98 Nepal 1,290,694 2.4486
99 Oman 523,644 2.4125
100 Peru 8,881,611 2.3764
101 Ireland 5,073,295 2.2550
102 Bhutan 564,497 2.2252
103 Bangladesh 653,738 2.0881
104 United Kingdom iNaturalistUK 179,386,804 2.0854
105 Israel iNaturalistil 7,023,671 2.0637
106 India 50,945,385 2.0362
107 Federated States of Micronesia 130,557 2.0068
108 Costa Rica NaturalistaCR 31,581,985 1.8071
109 Switzerland 28,174,048 1.6532
110 Pakistan 572,636 1.5437
111 Colombia NaturalistaCO 32,226,616 1.4854
112 United Arab Emirates 1,968,642 1.4806
113 Guatemala iNaturalistGT 4,598,258 1.2107
114 Guyana 830,244 1.2107
115 France 192,598,919 1.2021
116 Kiribati 157,257 1.1618
117 Belize 6,646,850 1.0838
118 Turkmenistan 22,062 1.0742
119 Denmark 60,344,753 1.0540
120 Finland iNaturalistFi 45,743,721 1.0521
121 Papua New Guinea 1,704,726 0.8613
122 Nauru 4,714 0.8061
123 Venezuela 4,189,542 0.7974
124 Belgium 39,976,677 0.7507
125 Paraguay 1,412,769 0.7230
126 Afghanistan 65,829 0.6806
127 Estonia 7,446,938 0.5402
128 Netherlands 123,944,227 0.3671
129 Norway 53,254,830 0.3433
130 Sweden 141,826,712 0.2148

Number of users recording in the country

Code
data_variables %>% 
  select(country_name, site_name, n_users) %>% 
  arrange(desc(n_users)) %>%
  mutate('#'= row_number()) %>% relocate('#') %>% 
  rename(`Country` = country_name,
         `iNat site` = site_name,
         `Users recording on iNat`=n_users) %>% 
  kableExtra::kbl(digits=4, format.args = list(big.mark = ',')) %>% 
  kableExtra::kable_material('striped') %>% 
  kableExtra::row_spec(c(1,2,4,7,10,11,12,14,15,16,18,22,26,28,33,47,49,51,61), bold = T, color = "white", background = "#228A22") %>% 
  kableExtra::scroll_box(height = '600px')
# Country iNat site Users recording on iNat
1 Mexico iNaturalistMX 166,175
2 United Kingdom iNaturalistUK 145,086
3 France 128,279
4 Australia iNaturalistAU 116,817
5 Italy 85,798
6 Germany 79,925
7 Spain Natusfera 75,563
8 Denmark 74,527
9 Brazil 69,957
10 Taiwan iNaturalistTW 57,783
11 Colombia NaturalistaCO 54,064
12 New Zealand iNaturalistNZ 46,991
13 India 46,458
14 Portugal BioDiversity4All 36,431
15 Ecuador iNaturalistEc 36,342
16 Costa Rica NaturalistaCR 35,327
17 Czechia 33,922
18 Finland iNaturalistFi 29,066
19 Netherlands 29,007
20 Bolivia 28,956
21 Austria 28,649
22 Argentina ArgentiNat 24,765
23 Belgium 24,564
24 Japan 23,220
25 Thailand 22,958
26 Chile iNaturalistCL 22,833
27 Switzerland 21,953
28 Greece iNaturalistGR 21,690
29 Indonesia 21,514
30 Sweden 19,000
31 Malaysia 18,659
32 China 17,797
33 Panama iNaturalistPa 17,553
34 Poland 17,070
35 Peru 16,732
36 Philippines 15,739
37 Turkey 13,594
38 Turkey 13,594
39 Croatia 12,772
40 Ireland 12,725
41 Norway 12,583
42 Ukraine 12,060
43 Singapore 9,985
44 Lithuania 9,104
45 Honduras 8,713
46 South Korea 7,949
47 Guatemala iNaturalistGT 7,814
48 Hungary 7,081
49 Luxembourg iNaturalist.LU 6,843
50 Iceland 6,417
51 Israel iNaturalistil 6,374
52 Slovenia 6,300
53 Romania 6,116
54 Dominican Republic 6,106
55 Vietnam 6,037
56 Slovakia 5,431
57 Belize 4,653
58 Sri Lanka 4,259
59 United Arab Emirates 4,161
60 Bahamas 4,158
61 Uruguay NaturalistaUY 4,041
62 Bulgaria 3,473
63 Nepal 3,177
64 Jamaica 3,138
65 Nicaragua 2,966
66 Kazakhstan 2,958
67 El Salvador 2,831
68 Cuba 2,707
69 Estonia 2,686
70 Cyprus 2,437
71 Serbia 2,409
72 Cambodia 2,407
73 Trinidad and Tobago 2,326
74 Latvia 2,273
75 Venezuela 2,197
76 Montenegro 2,118
77 Albania 1,842
78 Malta 1,672
79 Fiji 1,650
80 Maldives 1,568
81 Pakistan 1,509
82 Bhutan 1,452
83 Bosnia and Herzegovina 1,404
84 Iran 1,404
85 Armenia 1,339
86 Saudi Arabia 1,330
87 Paraguay 1,280
88 Myanmar 1,260
89 Jordan 1,255
90 Laos 1,254
91 Mongolia 1,241
92 Macedonia 1,100
93 Palestine 1,093
94 Oman 1,041
95 Uzbekistan 969
96 Bangladesh 904
97 Kyrgyzstan 898
98 Lebanon 703
99 Azerbaijan 702
100 Papua New Guinea 655
101 Guyana 598
102 Cyprus 532
103 Suriname 485
104 Vanuatu 478
105 Qatar 461
106 Haiti 436
107 Palau 414
108 Moldova 388
109 Iraq 377
110 Liechtenstein 375
111 Brunei 346
112 Federated States of Micronesia 345
113 Kuwait 326
114 Tajikistan 300
115 Georgia 293
116 Georgia 293
117 Bahrain 291
118 Solomon Islands 255
119 Samoa 202
120 Syria 172
121 Tonga 168
122 Yemen 129
123 Afghanistan 128
124 Marshall Islands 88
125 Turkmenistan 84
126 North Korea 76
127 Kiribati 35
128 Tuvalu 24
129 Nauru 11
130 Timor Leste

Associations between variables

Population of the country

Code
## records
ggplot(data_variables %>% mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(pop/100000, n_records_inat/1000, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='Population of the country (hundred thousand)',
       y='Number of records on iNaturalist (thousand)') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

Number of records on iNaturalist vs Population of the country
Code
## records in GBIF
ggplot(data_variables %>% mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(pop/100000, n_records_gbif_iNat/1000, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='Population of the country (hundred thousand)',
       y='Number of iNat records on GBIF (thousand)') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

Number of iNat records on GBIF vs Population of the country
Code
## users
ggplot(data_variables %>% mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(pop/100000, n_users, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', col= 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='Population of the country (hundred thousand)',
       y='Number of users recording on iNaturalist') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

Number of users recording on iNaturalist vs Population of the country

Area of the country in km2

Code
## records
ggplot(data_variables %>% mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(area/1000,n_records_inat/1000, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='Area of the country (thousand km2)',
       y='Number of records on iNaturalist (thousand)') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

Number of records on iNaturalist vs Area of the country
Code
## records in gbif
ggplot(data_variables %>% mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(area/1000, n_records_gbif_iNat/1000, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='Area of the country (thousand km2)',
       y='Number of iNat records on GBIF (thousand)') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

Number of iNat records on GBIF vs Area of the country
Code
## users
ggplot(data_variables %>% mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(area/1000, n_users, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='Area of the country (thousand km2)',
       y='Number of users recording on iNaturalist') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

Number of users recording on iNaturalist vs Area of the country

Country’s centroid latitude

Code
## records
ggplot(data_variables %>% mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(abs(latitude), n_records_inat/1000, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='Absolute decimal latitude of the country\'s centroid',
       y='Number of records on iNaturalist (thousand)') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

Number of records on iNaturalist vs country’s centroid latitude
Code
## records in gbif
ggplot(data_variables %>% mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(abs(latitude), n_records_gbif_iNat/1000, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='Absolute decimal latitude of the country\'s centroid',
       y='Number of iNat records on GBIF (thousand)') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

Number of iNat records on GBIF vs country’s centroid latitude
Code
## users
ggplot(data_variables %>% 
         mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(abs(latitude), n_users, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='Absolute decimal latitude of the country\'s centroid',
       y='Number of users recording on iNaturalist') +
  #scale_x_log10() + 
  scale_y_log10() +
  theme_bw()

Number of users recording on iNaturalist vs country’s centroid latitude

GDP per capita

Code
## records
ggplot(data_variables %>% mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(gdp/1000, n_records_inat/1000, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='GDP per capita (thousand USD)',
       y='Number of records on iNaturalist (thousand)') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

Code
## records in gbif
ggplot(data_variables %>% mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(gdp/1000, n_records_gbif_iNat/1000, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='GDP per capita (thousand USD)',
       y='Number of iNat records on GBIF (thousand)') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

Code
## users
ggplot(data_variables %>% 
         mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(gdp/1000, n_users, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='GDP per capita (thousand USD)',
       y='Number of users recording on iNaturalist') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

% of the GDP of the country dedicated to research

Code
## records
ggplot(data_variables %>% mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(gdp_research, n_records_inat/1000, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='GDP of the country dedicated to research (%)',
       y='Number of records on iNaturalist (thousand)') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

Code
## records in gbif
ggplot(data_variables %>% mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(gdp_research, n_records_gbif_iNat/1000, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='GDP of the country dedicated to research (%)',
       y='Number of iNat records on GBIF (thousand)') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

Code
## users
ggplot(data_variables %>% 
         mutate(site_on_iNat = ifelse(!is.na(site_id), 'yes', 'no')), 
       aes(gdp_research,n_users, label = site_name)) +
  geom_point(aes(col=site_on_iNat), size=2, show.legend = F) +
  scale_color_manual(values = c('black', '#74AC00')) +
  geom_smooth(method='lm', colour = 'black') +
  geom_label_repel(aes(fill=site_on_iNat), 
                   colour = "black", #fontface = "bold",
                   segment.color = 'black',
                   show.legend = F, max.overlaps= Inf) +
  scale_fill_manual(values = c('#F7F7F7', '#74AC00')) +
  labs(x='GDP of the country dedicated to research (%)',
       y='Number of users recording on iNaturalist') +
  scale_x_log10() + scale_y_log10() +
  theme_bw()

Modelling

Code
data_regressions <- data_variables %>% 
  mutate(has_site = ifelse(!is.na(site_name), 1, 0)) %>% 
  mutate(has_site = as.factor(has_site)) %>% 
  mutate(n_gbif_inat = n_records_gbif_iNat) %>% 
  dplyr::select(country_code, n_records_inat, n_gbif_inat, n_users,  
                area, gdp, gdp_research, pop, latitude, has_site) %>% 
  filter(!is.na(gdp_research) & !is.na(latitude)) # remove NAs

Total number of records on iNaturalist per country

Code
fit_n_records <- lm(n_records_inat ~ area + gdp + gdp_research + pop + latitude + has_site, data=data_regressions)
step_n_records <- stepAIC(fit_n_records, direction = 'both')
Start:  AIC=2699.2
n_records_inat ~ area + gdp + gdp_research + pop + latitude + 
    has_site

               Df      Sum of Sq             RSS    AIC
- latitude      1     1879465083 179124783878877 2697.2
- pop           1   442967918677 179565872332471 2697.4
- gdp           1  1489740226801 180612644640595 2698.0
<none>                           179122904413794 2699.2
- gdp_research  1  4501906687530 183624811101324 2699.6
- has_site      1 36097608129215 215220512543009 2714.6
- area          1 40299431542350 219422335956144 2716.5

Step:  AIC=2697.2
n_records_inat ~ area + gdp + gdp_research + pop + has_site

               Df      Sum of Sq             RSS    AIC
- pop           1   453430384053 179578214262930 2695.4
- gdp           1  1494507262448 180619291141325 2696.0
<none>                           179124783878877 2697.2
- gdp_research  1  4577093451012 183701877329889 2697.6
+ latitude      1     1879465083 179122904413794 2699.2
- area          1 40332782138534 219457566017412 2714.5
- has_site      1 40592890621256 219717674500133 2714.6

Step:  AIC=2695.44
n_records_inat ~ area + gdp + gdp_research + has_site

               Df      Sum of Sq             RSS    AIC
- gdp           1  1849935347177 181428149610107 2694.4
<none>                           179578214262930 2695.4
- gdp_research  1  4234987994738 183813202257668 2695.7
+ pop           1   453430384053 179124783878877 2697.2
+ latitude      1    12341930459 179565872332471 2697.4
- has_site      1 42644595762227 222222810025157 2713.7
- area          1 55159495028943 234737709291873 2718.9

Step:  AIC=2694.41
n_records_inat ~ area + gdp_research + has_site

               Df      Sum of Sq             RSS    AIC
<none>                           181428149610107 2694.4
+ gdp           1  1849935347177 179578214262930 2695.4
+ pop           1   808858468782 180619291141325 2696.0
+ latitude      1    31697541816 181396452068291 2696.4
- gdp_research  1 12303746361332 193731895971439 2698.6
- has_site      1 45743267039413 227171416649520 2713.8
- area          1 53450348971357 234878498581464 2716.9
Code
step_n_records$anova # display results 
Stepwise Model Path 
Analysis of Deviance Table

Initial Model:
n_records_inat ~ area + gdp + gdp_research + pop + latitude + 
    has_site

Final Model:
n_records_inat ~ area + gdp_research + has_site

        Step Df      Deviance Resid. Df      Resid. Dev      AIC
1                                    88 179122904413794 2699.196
2 - latitude  1    1879465083        89 179124783878877 2697.197
3      - pop  1  453430384053        90 179578214262930 2695.437
4      - gdp  1 1849935347177        91 181428149610107 2694.410

Number of records from iNaturalist on GBIF per country

Code
fit_gbif <- lm(n_gbif_inat ~ area + gdp + gdp_research + pop + latitude + has_site, data=data_regressions)
step_gbif <- stepAIC(fit_gbif, direction = 'both')
Start:  AIC=2564.97
n_gbif_inat ~ area + gdp + gdp_research + pop + latitude + has_site

               Df     Sum of Sq            RSS    AIC
- latitude      1  315717312964 43921082329633 2563.7
- gdp           1  666165622016 44271530638684 2564.4
- pop           1  809915653463 44415280670132 2564.7
<none>                          43605365016669 2565.0
- gdp_research  1 1129505415664 44734870432333 2565.4
- area          1 8613029999591 52218395016260 2580.1
- has_site      1 8748304304980 52353669321648 2580.3

Step:  AIC=2563.66
n_gbif_inat ~ area + gdp + gdp_research + pop + has_site

               Df     Sum of Sq            RSS    AIC
- gdp           1  638440605559 44559522935192 2563.0
- pop           1  718375607131 44639457936764 2563.2
<none>                          43921082329633 2563.7
- gdp_research  1 1345687709564 45266770039198 2564.5
+ latitude      1  315717312964 43605365016669 2565.0
- has_site      1 8614876196108 52535958525741 2578.7
- area          1 8744991457837 52666073787471 2578.9

Step:  AIC=2563.03
n_gbif_inat ~ area + gdp_research + pop + has_site

               Df     Sum of Sq            RSS    AIC
<none>                          44559522935192 2563.0
- pop           1 1003137153861 45562660089053 2563.1
+ gdp           1  638440605559 43921082329633 2563.7
+ latitude      1  287992296508 44271530638684 2564.4
- gdp_research  1 4133054009908 48692576945101 2569.4
- area          1 8740680470877 53300203406070 2578.0
- has_site      1 9195008827648 53754531762841 2578.8
Code
step_gbif$anova # display results 
Stepwise Model Path 
Analysis of Deviance Table

Initial Model:
n_gbif_inat ~ area + gdp + gdp_research + pop + latitude + has_site

Final Model:
n_gbif_inat ~ area + gdp_research + pop + has_site

        Step Df     Deviance Resid. Df     Resid. Dev      AIC
1                                   88 43605365016669 2564.971
2 - latitude  1 315717312964        89 43921082329633 2563.656
3      - gdp  1 638440605559        90 44559522935192 2563.027

Number of users recording in the country

Code
fit_users <- lm(n_users ~ area + gdp + gdp_research + pop + latitude + has_site, data=data_regressions)
step_users <- stepAIC(fit_users, direction = 'both')
Start:  AIC=1944.29
n_users ~ area + gdp + gdp_research + pop + latitude + has_site

               Df  Sum of Sq         RSS    AIC
- pop           1     471448 63396597039 1942.3
- gdp           1  328699880 63724825472 1942.8
<none>                       63396125592 1944.3
- latitude      1 1404571530 64800697122 1944.4
- gdp_research  1 2853359159 66249484751 1946.5
- area          1 5298553260 68694678852 1949.9
- has_site      1 8195320985 71591446577 1953.8

Step:  AIC=1942.29
n_users ~ area + gdp + gdp_research + latitude + has_site

               Df  Sum of Sq         RSS    AIC
- gdp           1  342789826 63739386865 1940.8
<none>                       63396597039 1942.3
- latitude      1 1424279387 64820876426 1942.4
+ pop           1     471448 63396125592 1944.3
- gdp_research  1 2902285031 66298882070 1944.5
- area          1 8063769189 71460366229 1951.7
- has_site      1 8288821594 71685418633 1952.0

Step:  AIC=1940.8
n_users ~ area + gdp_research + latitude + has_site

               Df  Sum of Sq         RSS    AIC
<none>                       63739386865 1940.8
- latitude      1 1497676656 65237063521 1941.0
+ gdp           1  342789826 63396597039 1942.3
+ pop           1   14561393 63724825472 1942.8
- gdp_research  1 6321864595 70061251460 1947.8
- area          1 7773614186 71513001051 1949.7
- has_site      1 8742389334 72481776199 1951.0
Code
step_users$anova # display results 
Stepwise Model Path 
Analysis of Deviance Table

Initial Model:
n_users ~ area + gdp + gdp_research + pop + latitude + has_site

Final Model:
n_users ~ area + gdp_research + latitude + has_site


   Step Df    Deviance Resid. Df  Resid. Dev      AIC
1                             88 63396125592 1944.285
2 - pop  1    471447.8        89 63396597039 1942.286
3 - gdp  1 342789825.6        90 63739386865 1940.798

Best models

Code
# n_records_inat ~ area + gdp_research + has_site
# n_gbif_inat ~ area + gdp_research + pop + has_site
# n_users ~ area + gdp_research + latitude + has_site

modelo_n_records <- lm(n_records_inat ~ area + gdp + gdp_research + has_site, data=data_regressions)
modelo_gbif <- lm(n_gbif_inat ~ area + gdp_research + pop + has_site, data=data_regressions)
modelo_users <- lm(n_users ~ area + gdp_research + latitude + has_site, data=data_regressions)

Total number of records on iNaturalist per country

Code
stargazer::stargazer(modelo_n_records,
          ci = T, digits=1,
          type='html',
          title = 'Número de registros en iNaturalist')
Número de registros en iNaturalist
Dependent variable:
n_records_inat
area 0.5***
(0.3, 0.7)
gdp 6.8
(-7.0, 20.5)
gdp_research 223,318.7
(-77,117.8, 523,755.2)
has_site1 1,740,284.0***
(1,002,479.0, 2,478,089.0)
Constant -71,688.8
(-509,920.9, 366,543.3)
Observations 95
R2 0.4
Adjusted R2 0.4
Residual Std. Error 1,412,556.0 (df = 90)
F Statistic 16.3*** (df = 4; 90)
Note: p<0.1; p<0.05; p<0.01

Number of records from iNaturalist on GBIF per country

Code
stargazer::stargazer(modelo_gbif,
          ci = T, digits=1,
          type='html',
          title = 'Cantidad de registros en GBIF')
Cantidad de registros en GBIF
Dependent variable:
n_gbif_inat
area 0.2***
(0.1, 0.4)
gdp_research 179,759.1***
(57,817.4, 301,700.9)
pop -0.001
(-0.002, 0.000)
has_site1 811,919.0***
(442,657.7, 1,181,180.0)
Constant -28,339.8
(-232,343.0, 175,663.3)
Observations 95
R2 0.4
Adjusted R2 0.4
Residual Std. Error 703,637.6 (df = 90)
F Statistic 14.1*** (df = 4; 90)
Note: p<0.1; p<0.05; p<0.01

Number of users recording in the country

Code
stargazer::stargazer(modelo_users,
          ci = T, digits=1,
          type='html',
          title = 'Cantidad de usuarios en iNat')
Cantidad de usuarios en iNat
Dependent variable:
n_users
area 0.01***
(0.002, 0.01)
gdp_research 7,115.4***
(2,447.6, 11,783.1)
latitude -68.4
(-160.5, 23.8)
has_site1 26,347.7***
(11,649.7, 41,045.7)
Constant 5,051.0
(-2,920.3, 13,022.4)
Observations 95
R2 0.3
Adjusted R2 0.3
Residual Std. Error 26,612.3 (df = 90)
F Statistic 11.1*** (df = 4; 90)
Note: p<0.1; p<0.05; p<0.01